﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LM.Negocio.Objetos;
using LM.Repositorios.Interfaces;

namespace LM.Repositorios
{
    internal class RepositorioDeCliente : RepositorioDeObjetosAbstrato<Cliente>, IRepositorioDeCliente
    {
        public Cliente Consulte(int codigo)
        {
            var contexto = new Contexto();
            
            return contexto.DesvinculeObjeto( contexto.Cliente.FirstOrDefault(m => m.Codigo == codigo));
        }

        public IList<Cliente> ConsulteTodos()
        {
            var contexto = new Contexto();

            return contexto.Set<Cliente>().ToList();
        }

        protected override Cliente ConsulteObjetoPersistido(Cliente objeto)
        {
            return base.Consulte(o => o.Codigo == objeto.Codigo).FirstOrDefault();
        }

        public void Atualize(Cliente objeto)
        {
            using (var contexto = new Contexto())
            {
                var objetoCadastrado = ConsulteObjetoPersistido(objeto);
                if (objetoCadastrado != null)
                {
                    objeto.Id = objetoCadastrado.Id;
                    var obj = contexto.Entry(contexto.Set<Cliente>().Single(o => o.Id == objetoCadastrado.Id));


                    obj.Entity.Telefones.Clear();
                    obj.Entity.Telefones.AddRange(objeto.Telefones);

                    obj.Entity.Endereco.Clear();
                    obj.Entity.Endereco.AddRange(objeto.Endereco);


                    obj.CurrentValues.SetValues(objeto);
                    contexto.SaveChanges();
                }
            }
        }

    }
}
